package com.sc;


import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

/**
 * 默认情况下注册到eureka server的服务是通过心跳来告知自己是UP还是DOWN，并不是通过spring-boot-actuator模块的/health端点来实现的，
 * 这样其实不是很合理。
 *
 * 默认的心跳实现方式可以有效的检查eureka客户端进程是否正常运作，但是无法保证客户端应用能够正常提供服务。
 * 由于大多数微服务应用都会有一些其他的外部资源依赖，比如数据库，REDIS缓存等，
 * 如果我们的应用与这些外部资源无法连通的时候，实际上已经不能提供正常的对外服务了，但因为客户端心跳依然在运行，
 * 所以它还是会被服务消费者调用，而这样的调用实际上并不能获得预期的后果。
 *
 * 我们可以通过在eureka客户端中配置:eureka.client.healthcheck.enabled=true，
 * 就可以改变eureka server对客户端健康检测的方式，改用actuator的/health端点来检测
 * ————————————————
 * 版权声明：本文为CSDN博主「xiao_jun_0820」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
 * 原文链接：https://blog.csdn.net/xiao_jun_0820/java/article/details/77991963
 */
@Component
public class MyHealthChecker implements HealthIndicator {


    private boolean up = true;

    @Override
    public Health health() {
        if (up) {
            return new Health.Builder().withDetail("aaa_cnt", 10) //自定义监控内容
                    .withDetail("bbb_status", "up").up().build();
        } else {
            return new Health.Builder().withDetail("error", "client is down").down().build();
        }

    }

    public boolean isUp() {
        return up;
    }

    public void setUp(boolean up) {
        this.up = up;
    }
}
